package user;

import java.util.List;

import user.blog.BlogIF;
import user.notifier.Announcement;
import user.profile.Profile;

public interface UserIF {

	/**
	 * 
	 * Return a  password of User
	 * 
	 * @return a password of User
	 */
	public String getPassword();

	/**
	 * Change the password
	 * 
	 * @param password new passoord
	 * @throws Exception
	 */
	public void setPassword(String password) throws Exception;

	/**
	 * Return a Profile
	 * @return a profile
	 */
	public Profile getProfile();

	/**
	 * Change profile
	 * @param newProfile new profile
	 */
	public void setProfile(Profile newProfile);
	
	/**
	 * Get the session ID
	 * @return the session ID
	 */
	public String getSessionID();

	/**
	 * Deleta todos os blogs.
	 * @return
	 * @throws Exception
	 */
	public boolean deleteBlogs() throws Exception;
	/**
	 * 
	 * @return true se o usuario esta logado
	 */
	public boolean isLogged();
	/**
	 * Altera o status do usuario, se logado, vai desloga-lo.
	 */
	public void changeStatus();
	
	/**
	 * Get the login
	 * @return login
	 */
	public String getLogin();
	
	/**
	 * Return a list of blogs
	 * @return list of blogs
	 */
	public List<BlogIF> getBlogs();
	
	/**
	 * Get blog by ID
	 * @param blogID
	 * @return a blog
	 * @throws Exception
	 */
	public BlogIF getBlog(String blogID) throws Exception;

	/**
	 * Create a blog
	 * @param idSession id session
	 * @param title title the blog
	 * @param description description the blog
	 * @return a blog
	 * @throws Exception
	 */
	public String createBlog(String idSession, String title, String description) throws Exception;

	/**
	 * Change information the blog
	 * @param idSession new id session
	 * @param title new title the blog
	 * @param description new description the blog
	 * @return a new blog
	 * @throws Exception
	 */
	public void changeBlogInformation(String idSession, String id, String atributo,
			String valor) throws Exception;
	
	/**
	 * Adiciona um anuncio no usuario
	 * @param announcement
	 */
	public void addAnnouncement(Announcement announcement);
	
	/**
	 * Return annoucements
	 * @return a list of annoucements
	 */
	public List<Announcement> getAnnouncements();

	/**
	 * Delete a blog
	 * @param blogId id of blog
	 * @throws Exception
	 */
	public void deleteBlog(String blogId) throws Exception;

}